const { Solar } = require('lunar-javascript'); // 引入农历计算库

const startDate = new Date('2025-10-01');
const endDate = new Date('2025-10-31');
/*
红包、礼物 都是媳妇给提醒(大节日521+礼物，小节日买礼物)
领证(阳历)

type_1: ['',''],// 每天要干的事儿
ype_2: {1:['','']},// 每个月几号几号需要干的事情
ype_3: [[[8,18],'']],// 每月特定日期组合需要干的事情
ype_4: {1:['','']},// 每周几周几要干的事情
ype_5: {'2024-05-16':['','']},// 特定的日子需要干的事情(阳历)
ype_6: {'05-26':['','']},// 特定阳历需要干的事情
ype_7: {'05-26':['','']},// 特定农历需要干的事情
//type_8: {'2024-05-16':['','']},// 特定的日子需要干的事情(阴历) 没做
*/

// 每一天的日程安排
const formatDate = (date) => {
  const dayOfWeek = ['日', '一', '二', '三', '四', '五', '六'][date.getDay()];
  return `${date.getMonth() + 1}-${date.getDate()} 周${dayOfWeek}`;
};

// 修改活动映射结构，允许日期数组作为键
const activityMap = {
  type_1: [
    // 每天要干的事儿
    // '抖音签到',
  ],
  type_2: {
    // 每个月几号几号需要干的事情
    1: ['[腾讯文档]房贷记录', '[腾讯文档]qq、订阅号登录', 'MongoDB在线数据库登录一下'],
    2: ['支付宝一元话费充值', '支付宝生活缴费红包', '招商银行生活缴费红包'],
    6: ['[信用卡]抖音月付、平安'],
    20: ['招商信用卡', '腾讯文档月度记账'],
    19: ['花呗还款'],
    21: ['美团月付'],
  },
  type_3: [
    // 每月特定日期组合需要干的事情
    [[8, 18, 28], ['[电信]逢8大转盘']],// 逢8大转盘日期
  ],
  type_4: {
    // 每周几周几要干的事情  0就是周日
    0: ['[视频]开讲啦', '[视频]对话'],
    1: [],
    2: ['微信读书翻一翻'],
    3: [],
    4: [],
    5: ['电信周五大转盘'],
    6: [],
  },
  type_5: {
    // 特定的日子需要干的事情(阳历)
    '2025-05-24': ['京东金融-中信证券赎回'],
    '2026-03-01': ['该订购一个打电话语音包，一年期到了'],
  },
  type_6: {
    // 特定阳历需要干的事情
    '01-01': ['元旦 给媳妇发红包', '203812677 联通飞车生日'],
    '02-14': ['情人节 给媳妇发红包'],
    '03-07': ['女神节 给媳妇发红包'],
    '07-03': ['结婚纪念日 给媳妇发红包、买礼物(农历5-16)'],
    '09-10': ['教师节 给媳妇发红包'],
    '10-09': ['第一次加上微信(21年) 给媳妇发红包'],
    '12-13': ['电信飞车生日'],
  },
  type_7: {
    // 特定农历需要干的事情
    '01-01': ['订婚纪念日 给媳妇发红包'],
    '01-21': ['农历新年 给媳妇发红包'],
    '07-07': ['七夕 给媳妇发红包'],
    '11-04': ['生日 给媳妇发红包、买礼物'],
    '02-08': ['雅文爸爸生日'],
    '09-02': ['雅文妈妈生日'],
    '04-26': ['郭坤生日'],
    '08-21': ['妈妈生日'],
    '05-01': ['[电信]生日流量'],
  },
};

/*
红包、礼物 都是媳妇给提醒(大节日521+礼物，小节日买礼物)
领证(阳历)
*/

let output = '';

while (startDate <= endDate) {
  const formattedDate = formatDate(startDate);
  const year = startDate.getFullYear();
  const month = startDate.getMonth() + 1;
  const day = startDate.getDate();
  const dayOfWeek = startDate.getDay();

  const str_month = month < 10 ? `0${month}` : `${month}`;
  const str_day = day < 10 ? `0${day}` : `${day}`;
  const DateKey_1 = `${year}-${str_month}-${str_day}`;
  const DateKey_2 = `${str_month}-${str_day}`;

  output += `# ${formattedDate}\n`; // 4-18 周四 采用markdown
  // output += `${formattedDate}\n`; // 4-18 周四

  // type_1: [// 每天发生的事儿
  var type_1 = activityMap.type_1 || [];
  type_1.forEach((item) => {
    output += `${item} ${formattedDate}\n`;
  });

  // type_2: {// 每个月几号几号需要干的事情
  const type_2 = activityMap.type_2 || {};
  var arr = type_2[day] || [];
  arr.forEach((item) => {
    output += `${item}\n`;
  });

  // type_3: [// 特定日期组合需要干的事情
  var type_3 = activityMap.type_3 || [];
  type_3.forEach((item) => {
    if (item[0].includes(day)) {
      arr = item[1];
      arr.forEach((v) => {
        output += `${v}\n`;
      });
    }
  });

  // type_4: {// 每周几周几要干的事情
  const type_4 = activityMap.type_4 || {};
  arr = type_4[dayOfWeek] || [];
  arr.forEach((item) => {
    output += `${item} ${formattedDate}\n`;
  });

  // type_5: {// 特定的日子需要干的事情
  const type_5 = activityMap.type_5 || {};
  arr = type_5[DateKey_1] || [];
  arr.forEach((item) => {
    output += `${item}\n`;
  });

  // type_6: {// 特定阳历需要干的事情
  const type_6 = activityMap.type_6 || {};
  arr = type_6[DateKey_2] || [];
  arr.forEach((item) => {
    output += `${item} ${DateKey_2}【特定阳历】\n`;
  });

  // type_7: {// 特定农历需要干的事情
  const type_7 = activityMap.type_7 || {};
  let solar = Solar.fromYmd(year, month, day);
  let lunarObj = solar.getLunar();
  let lunar_month = lunarObj.getMonth();
  let lunar_day = lunarObj.getDay();
  lunar_month = ('' + lunar_month).padStart(2, '0');
  lunar_day = ('' + lunar_day).padStart(2, '0');
  let lunarKey = `${lunar_month}-${lunar_day}`;
  arr = type_7[lunarKey] || [];
  arr.forEach((item) => {
    output += `${item} [特定农历]\n`;
  });

  output += `\n`;

  startDate.setDate(startDate.getDate() + 1);
}

console.log(output);
